谈谈 Render Props
具有 render prop 的组件接受一个返回 React 元素的函数,并在组件内部通过调用此函数来实现自己的渲染逻辑。
<DataProvider render={data => (
<h1>Hello {data.target}</h1>
)}/>
示例 1
import React from "react";
import "./styles.css";
// 默认
// const Test = (props) => props.children("hello world");
// const App = () => <Test>{(text) => <div>{text}</div>}</Test>;
// render props
const Test = (props) => props.render("hello world");
const App = () => <Test render={(text) => <div>{text}</div>} />;
export default App;
示例 2
当你写项目时碰到需要重用的是功能不是 UI 时,试着用 render props 封装一个组件吧。当然 HOC 也是解决方法,
作用
- 为了重用性。React 的组件化就是为了方便重用。
- 大多数场景我们需要重用的是 UI(例如文章列表,侧栏),但也有少数情况需要重用的是功能和状态(例如 context)。
- 如果说 React 的核心是 State => UI, 普通的组件是 UI 重用,那么 render props 就是为了 State 重用而应运而生的。
优缺点
优点:数据共享、代码复用,将组件内的 state 作为 props 传递给调用者,将渲染逻辑交给调用者。 缺点:无法在 return 语句外访问数据、嵌套写法不够优雅